package com.malou.client.reportes;

import java.util.Date;
import java.util.List;

import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.IconButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ToolButton;
import com.extjs.gxt.ui.client.widget.custom.Portal;
import com.extjs.gxt.ui.client.widget.custom.Portlet;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Element;
import com.malou.client.MalouConstants;
import com.malou.client.util.Utilities;
import com.malou.client.ventas.tienda.Tiendas;

public class ResumenPanel extends ContentPanel {
	private MalouConstants constants = GWT.create(MalouConstants.class);
	public Portlet portletCaja;
	public Portlet portletVentas;
	public Portlet portletSeparaciones;
	public Portlet portletGastos;
	public Portlet portletSaldo;
	BalanceTienda blt;
	DateField fecha;
	Portal portal;
	private ComboBox<BeanModel> tienda;
	Label tiendaL;
	Status status;
	Button find;
	
	@Override  
	protected void onRender(Element parent, int index) {  
		super.onRender(parent, index);
		tienda.setRawValue(Utilities.tienda);
	}
	
	public ResumenPanel(){
		setLayout(new FitLayout());
		setFrame(true);  
        setCollapsible(true);  
        setAnimCollapse(false);  
        
        setIcon(IconHelper.createPath("images/icons/table.png"));  
        setHeading(constants.resumenDia());
        
        
		portal = new Portal(3);  
	    portal.setBorders(true);  
	    portal.setStyleAttribute("backgroundColor", "white");  
	    portal.setColumnWidth(0, .33);  
	    portal.setColumnWidth(1, .33);  
	    portal.setColumnWidth(2, .33);
	    
	    addPanels(portal);
	    
	    Tiendas.getComboTienda();
        tienda = new ComboBox<BeanModel>();       
	    tienda.setEditable(false);	    
	    tienda.setDisplayField("nombre");	       
	    tienda.setWidth(150);  
	    tienda.setStore(Tiendas.storeCombo);  
	    tienda.setTypeAhead(true);  
	    tienda.setTriggerAction(TriggerAction.ALL);
	    tienda.setValueField("nombre");
	    tienda.setUseQueryCache(false);
	    tienda.setAllowBlank(true);

        ToolBar toolBar = new ToolBar();
        
        tiendaL = new Label(constants.graficosTienda());
	    toolBar.add(tiendaL);
	    toolBar.add(tienda);
        
        fecha = new DateField();	    
        fecha.setFieldLabel(constants.resumenFecha());	
        fecha.getPropertyEditor().setFormat(DateTimeFormat.getFormat("yyyy-MM-dd"));
        fecha.setAllowBlank(false);
        fecha.setValue(new Date());
              
        /*final ResumenPanel rpan = this;
        fecha.getDatePicker().addListener(Events.Select, new Listener<BaseEvent>() {

			@Override
			public void handleEvent(BaseEvent be) {
				//ResumenPanel.this.removeAll();
				blt = new BalanceTienda();
				 blt.setFecharesumen(fecha.getValue());
				 Reportes.rpan = rpan;
				 
				 //addPanels(portal);
				 Reportes.setBalanceTienda(blt);
			}
		});*/
                
		
        Label fechaL = new Label(constants.resumenFecha()+": ");
        fechaL.setStyleAttribute("paddingLeft", "20px");
        
        toolBar.add(fechaL);
        toolBar.add(fecha);
        
        status = new Status();
	    status.setBusy(constants.cargando());
	    status.hide();    
	    status.setAutoWidth(true);
	    status.setStyleAttribute("paddingLeft", "20px");
	    toolBar.add(status);
	    
	    find = new Button(constants.find(), IconHelper.createPath("images/icons/find.png"));
        find.setStyleAttribute("paddingLeft", "20px");
        
        find = new Button(constants.find(), IconHelper.createPath("images/icons/find.png"));
        find.setStyleAttribute("paddingLeft", "20px");
        
        SelectionListener<ButtonEvent> sl_find;        
        sl_find = new SelectionListener<ButtonEvent>(){
        	
        	@Override
			public void componentSelected(ButtonEvent ce) {		
				if(validate()){
					buscar();
				}
			}
        };
        find.addSelectionListener(sl_find);
        
        toolBar.add(find);
        
        setTopComponent(toolBar);
        
        /*blt = new BalanceTienda();
		 blt.setFecharesumen(new Date());
		 Reportes.rpan = this;
		    Reportes.setBalanceTienda(blt);
	    */
        
        buscar();
	    
	}
	
	private void addPanels(Portal portal){
		portletCaja = new Portlet();  
	    portletCaja.setHeading(constants.resumenCajaInicial());  
	    configPanel(portletCaja);  
	    //portletCaja.addText(constants.resumenCajaInicialEs());  
	    portal.add(portletCaja, 0);
	    
	    portletVentas = new Portlet();  
	    portletVentas.setHeading(constants.resumenVentas());  
	    configPanel(portletVentas);  
	    //portletVentas.addText(constants.resumenVentasEs());  
	    portal.add(portletVentas, 1);
	    
	    portletSeparaciones = new Portlet();  
	    portletSeparaciones.setHeading(constants.resumenSeparaciones());  
	    configPanel(portletSeparaciones);  
	    //portletSeparaciones.addText(constants.resumenSeparacionesEs());  
	    portal.add(portletSeparaciones, 0);
	    
	    portletGastos = new Portlet();  
	    portletGastos.setHeading(constants.resumenGastos());  
	    configPanel(portletGastos);  
	    //portletGastos.addText(constants.resumenGastosEs());  
	    portal.add(portletGastos, 1);
	    
	    portletSaldo = new Portlet();  
	    portletSaldo.setHeading(constants.resumenSaldo());	    
	    configPanel(portletSaldo);  
	    //portletSaldo.addText(constants.resumenSaldoEs());	    
	    portal.add(portletSaldo, 0);
	    
	    add(portal);
	}
	
	private void configPanel(final ContentPanel panel) {  
	    panel.setCollapsible(true);  
	    panel.setAnimCollapse(false);  
	    panel.setHeight(130);
	    panel.setLayout(new CenterLayout());
	    panel.setFrame(true);	    
	    panel.getHeader().addTool(  
	        new ToolButton("x-tool-close", new SelectionListener<IconButtonEvent>() {  
	  
	          @Override  
	          public void componentSelected(IconButtonEvent ce) {  
	            panel.removeFromParent();  
	          }  
	  
	        }));  
	  }
	
	public void cargarDatos(BalanceTienda result){
		portletCaja.removeAll();
		portletVentas.removeAll();
		portletSeparaciones.removeAll();
		portletGastos.removeAll();
		portletSaldo.removeAll();
		
	    portletCaja.addText(constants.resumenCajaInicialEs()+" "+result.getSaldoinicial());
		portletVentas.addText(constants.resumenVentasEs()+" "+result.getIngresoventas());
		portletSeparaciones.addText(constants.resumenSeparacionesEs()+" "+result.getIngresoseparaciones());
		portletGastos.addText(constants.resumenGastosEs()+" "+result.getGastos());
		portletSaldo.addText(constants.resumenSaldoEs()+" "+result.getBalance());
	}
	
	private boolean validate() {
		boolean des = fecha.isValid();
		boolean tien = tienda.isValid();
		return des && tien;
	}
	
	private void buscar(){
		status.show();
		find.hide();
		
		final ResumenPanel rpan = this;
		blt = new BalanceTienda();
		 blt.setFecharesumen(fecha.getValue());
		 
		 if(tienda.getValue()!= null)
			 blt.setTienda_id(Integer.parseInt(tienda.getValue().get("id").toString()));
		 
		 Reportes.rpan = rpan;				 
		 Reportes.setBalanceTienda(blt); 
			
	}
	
	public void setPermisos(List<String> permisos){
		boolean todas = permisos.contains("lastiendas");
		boolean su = permisos.contains("sutienda");
		
		if(todas){
			tiendaL.setVisible(true);
			tienda.setEnabled(true);
		    tienda.setVisible(true);		    
		}else if(su){
			tiendaL.setVisible(false);
			tienda.setEnabled(false);
		    tienda.setVisible(false);
		}
	}
}
